Introduction

Published

August 6, 2025

Modified

August 6, 2025

R 语言中最令人感兴趣的特性之一是元编程(metaprogramming)。这种思想认为:代码即数据,可以被其他代码审查和修改,这深深地影响了R。从低水平上看,它实现了我们只需library(purrr)而无需添加""就可以加载R包;使plot(x, sin(x))能自动用xsin(x)作为图的坐标轴名称。从高水平看,它允许我们使用y ~ x1 + x2来描述一个模型;将subset(df, x == y)转换为df[df$x == df$y, , drop = FALSE];使用dplyr::filter(db, is.na(x))(当db是数据库链接时)生成SQL语句WHERE x IS NULL

与元编程关系密切的是非标准性评估(Non-standard Evaluation,NSE)。这个术语通常用来描述R函数的行为,但会导致两个方面的歧义。首先,NSE实际上是函数参数的一个属性,因此谈论NSE函数有点草率。其次,通过什么是非标准来定义某个东西会让人混淆,因此本书会使用更精确的词汇表。

本书会着重于由“rlang”包提供的整洁评估(tidy evaluation)。这将使你能够专注于重要的想法,而不会被R历史中产生的怪癖要求所分散注意力。在用rlang介绍完每个重要的想法后,本书会回过头来讨论这些想法在base R 中是如何实现的。这种方法可能看起来有些落后,但它就像学习如何使用自动变速器而不是换挡杆开车一样:它让你在学习细节之前先关注大局。本书侧重于整洁评估的理论方面,因此你可以从头到尾完全理解它是如何运作的。

我们会在下面五个章节中介绍元编程与整洁评估:

Back to top